/**
 * 操作t_emp表
 */
// 引入数据源
let pool = require('../../datasource.js');
let util = require("../../util.js");

/**
 * 查询列表
 * @param {Object} data 传入参数
 */
module.exports.queryList = function (data) {

    util.setupPage(data, 'hire_date desc');

    let sql = `SELECT
	t_emp_pk,
	emp_name,
	job,
	mgr,
	hire_date,
	sal,
	comm,
	t_dept_fk,
	d.dept_name,
	d.loc 
FROM
	t_emp e,
	t_dept d
WHERE e.t_dept_fk = d.t_dept_pk`;

    let params = [];

    if (data.emp_name) {
        // 开发中，严禁使用拼接字符串的方式组装SQL语句，因为有SQL注入风险
        // sql += ` AND e.emp_name LIKE '%${data.emp_name}%' `;
        sql += ` AND e.emp_name LIKE CONCAT('%',?,'%') `;
        params.push(data.emp_name);
    }
    if (data.dept_name) {
        sql += ` AND d.dept_name LIKE CONCAT('%',?,'%') `;
        params.push(data.dept_name);
    }
    if (data.loc) {
        sql += ` AND d.loc LIKE CONCAT('%',?,'%') `;
        params.push(data.loc);
    }
    if (data.hire_date_begin) {
        sql += ` AND e.hire_date >= ? `;
        params.push(data.hire_date_begin);
    }
    if (data.hire_date_end) {
        sql += ` AND e.hire_date <= ? `;
        params.push(data.hire_date_end + " 23:59:59.999");
    }

    // 打开了分页
    if (data.paging) {
        sql += ` order by ${data.order} LIMIT ?,? `;
        params.push(data.begin);
        params.push(data.rows);
    }

    console.log("sql = ", sql);
    console.log("params = ", params);

    return new Promise((resolve, reject) => {
        // 执行SQL步骤：1、获取连接
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }

            // 2、使用连接执行SQL
            // result：查询结果集（可以理解成一个数组）
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("查询出错：", err);
                    reject(null);
                }

                // 3、释放连接
                connection.release();

                resolve(result);

            });
        })
    })
}

/**
 * 根据ID查询一行数据
 * @param {Object} data 传入参数
 */
 module.exports.queryRow = function (data) {

    util.setupPage(data, 'hire_date desc');

    let sql = `SELECT
	t_emp_pk,
	emp_name,
	job,
	mgr,
	hire_date,
	sal,
	comm,
	t_dept_fk,
	d.dept_name,
	d.loc 
FROM
	t_emp e,
	t_dept d
WHERE e.t_dept_fk = d.t_dept_pk
AND e.t_emp_pk = ?`;

    let params = [data.t_emp_pk];
    console.log("sql = ", sql);
    console.log("params = ", params);

    return new Promise((resolve, reject) => {
        // 执行SQL步骤：1、获取连接
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }

            // 2、使用连接执行SQL
            // result：查询结果集（可以理解成一个数组）
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("查询出错：", err);
                    reject(null);
                }

                // 3、释放连接
                connection.release();

                resolve(result[0]);

            });
        })
    })
}

/**
 * 增加数据
 * @param {Object} data 传入参数
 */
module.exports.insert = function (data) {

    let sql = `INSERT INTO t_emp (emp_name,job,mgr,hire_date,sal,comm,t_dept_fk) VALUES (?,?,?,?,?,?,?);`
    let params = [data.emp_name, data.job, data.mgr, data.hire_date, data.sal, data.comm, data.t_dept_fk];

    console.log("sql = ", sql);
    console.log("params = ", params);

    return new Promise((resolve, reject) => {
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }
            // result对象中的重要属性:
            //  affectedRows: 受影响行数
            //  insertId: 如果有自增长主键，返回新增加数据的主键。
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("增加出错：", err);
                    reject(null);
                }

                // 3、释放连接
                connection.release();
                // 判断影响行数
                resolve(result);
            });
        })
    })

}

/**
 * 修改数据
 * @param {Object} data 传入参数
 */
module.exports.update = function (data, callback) {

    let sql = `UPDATE t_emp SET `;
    let params = [];
    if (data.emp_name) {
        sql += ' emp_name = ?,';
        params.push(data.emp_name)
    }
    if (data.job) {
        sql += ' job = ?,';
        params.push(data.job)
    }
    if (data.mgr) {
        sql += ' mgr = ?,';
        params.push(data.mgr)
    }
    if (data.hire_date) {
        sql += ' hire_date = ?,';
        params.push(data.hire_date)
    }
    if (data.sal) {
        sql += ' sal = ?,';
        params.push(data.sal)
    }
    if (data.comm) {
        sql += ' comm = ?,';
        params.push(data.comm)
    }
    if (data.t_dept_fk) {
        sql += ' t_dept_fk = ?,';
        params.push(data.t_dept_fk)
    }
    sql = sql.substring(0, sql.length - 1);
    sql += ' WHERE t_emp_pk = ?;';
    params.push(data.t_emp_pk);

    console.log("sql = ", sql);
    console.log("params = ", params);

    return new Promise((resolve, reject) => {
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }

            // 2、使用连接执行SQL
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("修改出错：", err);
                    reject(null);
                }

                // 3、释放连接
                connection.release();
                // 判断影响行数
                resolve(result);
            });
        })
    });
}

/**
 * 删除数据
 * @param {Object} data 传入参数
 */
module.exports.delete = function (data, callback) {

    let sql = `DELETE FROM t_emp 
    WHERE t_emp_pk = ?;`
    let params = [data.t_emp_pk];

    console.log("sql = ", sql);
    console.log("params = ", params);

    return new Promise((resolve, reject) => {
        pool.getConnection((err, connection) => {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                reject(null);
                return;
            }

            // 2、使用连接执行SQL
            connection.query(sql, params, function (err, result) {
                if (err) {
                    console.log("修改出错：", err);
                    reject(null);
                }

                // 3、释放连接
                connection.release();
                // 判断影响行数
                resolve(result);
            });
        })
    });
}
